Software bugs are errors, flaws, mistakes, or faults in computer programs that prevent it the program from behaving as intended and/or producing an incorrect result. Software testing, i.e. bug checking is a process used to assess and improve the qualities of computer software by identifying bugs in the implementation of the code (e.g., source code, object code, binary/executable code, etc.) so that they may be removed. The qualities of computer software may include the correctness, completeness, security, capability, reliability, efficiency, portability, maintainability, compatibility, usability and any other suitable characteristic.
Software testing which involves manually inspecting code may be tedious and repetitive as most software systems are in the order of thousands to millions of lines of code. Accordingly, dynamic and static program analyses methods have been developed to test software code.
Dynamic software testing, i.e., dynamic program analysis involves the analysis of executable code, i.e., during execution of the software to identify errors within the code. Static software testing, i.e., static program analysis involves the testing of non-executable code, i.e., not during execution of the software, to identify errors within the code and is usually performed on some version of the source code or object code.
Static program analysis of software code allows for classification of a portion or all of the statements within the software code as bug free statements or actual bug statements. Classification of the software code improves the efficiency of manual code inspection as a software tester is able to selectively inspect and/or modify the software code based on the classification.